#include <bits/stdc++.h>
#define int long long
using namespace std;
int read() {
	int x(0),f(0);
	char ch=getchar();
	while(!isdigit(ch)) f|=(ch=='-'),ch=getchar();
	while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
	return f?-x:x;
}
const int N=200005,K=405,mod=998244353;
void inc(int &x,int y) {x+=y,x>=mod&&(x-=mod);}
int n,k,dp[N][K],sum[K];
namespace sub1 {
	int u[6],v[6],ans[6];
	bool e[6];
	int fa[6];
	int find(int x) {
		if(x==fa[x]) return x;
		return fa[x]=find(fa[x]);
	}
	bool check() {
		for(int i=1;i<=n;++i) fa[i]=i;
		for(int i=1;i<n;++i)
			if(e[i]) fa[find(u[i])]=find(v[i]);
		for(int i=1;i<=n;++i) {
			int l=n+1,r=0,tot=0;
			for(int j=1;j<=n;++j) if(find(j)==find(i)) l=min(l,j),r=max(r,j),++tot;
			if(r-l+1>tot) return 0;
		}
		return 1;
	}
	void dfs(int x,int t) {
		if(x==n) {
			if(check()) ++ans[n-t];
			return;
		}
		e[x]=0;
		dfs(x+1,t);
		e[x]=1;
		dfs(x+1,t+1);
		e[x]=0;
	}
	void work() {
		for(int i=1;i<n;++i) u[i]=read(),v[i]=read();
		dfs(1,0);
		for(int i=1;i<=k;++i) cout<<ans[i]<<endl;
		exit(0);
	}
}
signed main() {
	freopen("soft.in","r",stdin);
	freopen("soft.out","w",stdout);
	n=read(),k=read();
	if(n<=4&&k<=4) sub1::work();
	dp[0][0]=sum[0]=1;
	for(int i=1;i<=n;++i)
	for(int j=k;j>=1;--j)
		dp[i][j]=sum[j-1],inc(sum[j],dp[i][j]);
	for(int i=1;i<=k;++i) printf("%lld\n",dp[n][i]);
	return 0;
}
/*
*/

